<!doctype html>
<html lang="zh-CN">
<head>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
  <meta http-equiv="X-UA-Compatible" content="ie=edge" />
  <link rel="shortcut icon" href="/favicon.ico">
  <title>西安科技大学计算机互助圈 - 用户注册</title>
  <!-- 导入CSS -->
  <link href="./dist/css/tabler.min.css?1674944402" rel="stylesheet" />
  <link rel="stylesheet" href="./dist/css/jquery.toast.css">
  <!-- 核心优化：统一科技风样式 -->
  <style>
    :root {
      --primary-color: #4A90E2;
      --hover-color: #357ABD;
      /* 与登录页一致的背景色体系 */
      --bg-color-1: #e6f7ff;
      --bg-color-2: #f0f7ff;
      --float-element-color: rgba(74, 144, 226, 0.1);
    }

    /* 优化1：统一背景渐变与纹理 */
    body {
      background: linear-gradient(135deg, var(--bg-color-1), var(--bg-color-2), #f5f9ff);
      background-size: 400% 400%;
      animation: gradientBG 20s ease infinite; /* 同步缓慢动画节奏 */
      min-height: 100vh;
      /* 浅蓝网格纹理，提升质感不干扰表单 */
      background-image:
              linear-gradient(rgba(160, 197, 232, 0.05) 1px, transparent 1px),
              linear-gradient(90deg, rgba(160, 197, 232, 0.05) 1px, transparent 1px);
      background-size: 20px 20px;
    }

    @keyframes gradientBG {
      0% { background-position: 0% 50%; }
      50% { background-position: 100% 50%; }
      100% { background-position: 0% 50%; }
    }

    /* 优化2：统一卡片质感 */
    .card {
      background: rgba(255, 255, 255, 0.95); /* 提升不透明度，与背景更融合 */
      backdrop-filter: blur(12px);
      -webkit-backdrop-filter: blur(12px);
      border: 1px solid rgba(220, 235, 250, 0.5); /* 浅蓝边框替代深色 */
      border-radius: 16px;
      box-shadow: 0 8px 32px 0 rgba(160, 197, 232, 0.15); /* 浅蓝阴影更柔和 */
      transition: all 0.3s ease;
    }

    .card:hover {
      transform: translateY(-5px);
      box-shadow: 0 15px 35px rgba(160, 197, 232, 0.2); /* hover效果同步 */
    }

    /* 优化3：输入框样式统一 */
    .form-control {
      border-radius: 8px;
      padding: 12px;
      border: 1px solid #e0e0e0;
      transition: all 0.3s ease;
      background: rgba(255, 255, 255, 0.9);
    }

    .form-control:focus {
      border-color: var(--primary-color);
      box-shadow: 0 0 0 3px rgba(74, 144, 226, 0.1);
      background: #ffffff;
    }

    /* 优化4：按钮样式统一 */
    .btn-primary {
      background-color: var(--primary-color);
      border: none;
      border-radius: 8px;
      padding: 12px;
      font-weight: 500;
      transition: all 0.3s ease;
    }

    .btn-primary:hover {
      background-color: var(--hover-color);
      transform: translateY(-1px); /* 微调hover位移，与登录页一致 */
    }

    /* 优化5：Logo动画统一 */
    .text-center.mb-4 img {
      margin-bottom: 20px; /* 增加底部间距，与登录页布局对齐 */
      transition: all 0.3s ease;
    }

    .text-center.mb-4 img:hover {
      transform: scale(1.05); /* 减缓缩放比例，避免过度夸张 */
    }

    /* 优化6：链接样式统一 */
    a {
      color: var(--primary-color);
      text-decoration: none;
      transition: all 0.3s ease;
    }

    a:hover {
      color: var(--hover-color);
      text-decoration: none;
    }

    /* 优化7：浮动背景元素（替换原气泡，与登录页几何形状统一） */
    .bg-bubbles {
      position: fixed;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      z-index: -1;
      overflow: hidden;
    }

    .bg-bubbles li {
      position: absolute;
      list-style: none;
      display: block;
      background: var(--float-element-color);
      opacity: 0.7; /* 透明度层级，增加层次感 */
      animation: square 25s linear infinite; /* 同步动画速度 */
      bottom: -150px;
      border-radius: 8px; /* 圆角矩形，替代原圆形+方形混合 */
    }

    /* 浮动元素差异化，避免单调 */
    .bg-bubbles li:nth-child(1) {
      left: 10%;
      width: 80px;
      height: 30px; /* 矩形 */
      animation-delay: 0s;
      animation-duration: 22s;
    }

    .bg-bubbles li:nth-child(2) {
      left: 20%;
      width: 25px;
      height: 25px; /* 小正方形 */
      border-radius: 6px;
      animation-delay: 2s;
      animation-duration: 18s;
      opacity: 0.5;
    }

    .bg-bubbles li:nth-child(3) {
      left: 25%;
      width: 60px;
      height: 20px; /* 扁矩形 */
      animation-delay: 4s;
      animation-duration: 25s;
    }

    .bg-bubbles li:nth-child(4) {
      left: 40%;
      width: 40px;
      height: 40px; /* 正方形 */
      border-radius: 10px;
      animation-duration: 20s;
      opacity: 0.6;
    }

    .bg-bubbles li:nth-child(5) {
      left: 70%;
      width: 70px;
      height: 25px; /* 扁矩形 */
      animation-delay: 0s;
      animation-duration: 15s;
    }

    /* 优化8：动画增加缩放变化，更灵动 */
    @keyframes square {
      0% {
        transform: translateY(0) rotate(0deg) scale(1);
        opacity: 0.4;
        border-radius: 8px;
      }
      50% {
        transform: translateY(-500px) rotate(180deg) scale(1.1);
        opacity: 0.7;
        border-radius: 10px; /* 中途微调圆角，增加细节 */
      }
      100% {
        transform: translateY(-1000px) rotate(360deg) scale(0.9);
        opacity: 0;
        border-radius: 6px;
      }
    }

    /* 优化9：表单细节统一 */
    .form-label {
      font-weight: 500;
      color: #4a5568; /* 低饱和文字色，与登录页一致 */
    }

    .form-check-input {
      border-color: var(--primary-color);
    }

    .form-check-input:checked {
      background-color: var(--primary-color);
      border-color: var(--primary-color);
    }

    /* 优化10：底部文字色适配背景 */
    .text-center.text-muted mt-3 {
      color: rgba(80, 100, 120, 0.7) !important;
    }

    /* 输入框组样式统一 */
    .input-group-text {
      background: transparent;
      border-left: none;
    }

    .input-group-flat .form-control {
      border-right: none;
    }

    /* 响应式适配统一 */
    @media (max-width: 768px) {
      .card-body {
        padding: 25px; /* 移动端减少内边距，适配小屏幕 */
      }
    }
  </style>
</head>

<body class="d-flex flex-column">
<!-- 浮动背景元素（样式已与登录页统一） -->
<ul class="bg-bubbles">
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
</ul>

<div class="page page-center">
  <div class="container container-tight py-4">
    <div class="text-center mb-4">
      <img src="./image/college-badge.png" height="50" alt="">
    </div>
    <form id="signUpForm" class="card card-md" autocomplete="off" novalidate>
      <div class="card-body">
        <h2 class="text-center mb-4">用户注册</h2>
        <!-- 用户名 -->
        <div class="mb-3">
          <label class="form-label required">用户名</label>
          <input type="text" class="form-control " placeholder="请输入用户名" name="username" id="username">
          <div class="invalid-feedback">用户名不能为空</div>
        </div>
        <!-- 昵称 -->
        <div class="mb-3">
          <label class="form-label required">昵称</label>
          <input type="text" class="form-control" placeholder="请输入昵称" name="nickname" id="nickname">
          <div class="invalid-feedback">昵称不能为空</div>
        </div>
        <!-- 密码 -->
        <div class="mb-3">
          <label class="form-label required">密码</label>
          <div class="input-group input-group-flat">
            <input type="password" class="form-control" placeholder="请输入密码" autocomplete="off" name="password" id="password">
            <span class="input-group-text">
              <a href="javascript:void(0);" class="link-secondary" id="password_a" title="显示密码" data-bs-toggle="tooltip">
                <svg xmlns="http://www.w3.org/2000/svg" class="icon" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
                  <path stroke="none" d="M0 0h24v24H0z" fill="none" />
                  <path d="M12 12m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" />
                  <path d="M22 12c-2.667 4.667 -6 7 -10 7s-7.333 -2.333 -10 -7c2.667 -4.667 6 -7 10 -7s7.333 2.333 10 7" />
                </svg>
              </a>
            </span>
            <div class="invalid-feedback">密码不能为空</div>
          </div>
        </div>
        <!-- 确认密码 -->
        <div class="mb-3">
          <label class="form-label required">确认密码</label>
          <div class="input-group input-group-flat">
            <input type="password" class="form-control" placeholder="再次输入密码" autocomplete="off" name="passwordRepeat" id="passwordRepeat">
            <span class="input-group-text">
              <a href="javascript:void(0);" class="link-secondary" id="passwordRepeat_a" title="显示密码" data-bs-toggle="tooltip">
                <svg xmlns="http://www.w3.org/2000/svg" class="icon" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
                  <path stroke="none" d="M0 0h24v24H0z" fill="none" />
                  <path d="M12 12m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" />
                  <path d="M22 12c-2.667 4.667 -6 7 -10 7s-7.333 -2.333 -10 -7c2.667 -4.667 6 -7 10 -7s7.333 2.333 10 7" />
                </svg>
              </a>
            </span>
            <div class="invalid-feedback">请检查确认密码</div>
          </div>
        </div>
        <div class="mb-3">
          <label class="form-check">
            <input type="checkbox" class="form-check-input" id="policy" />
            <span class="form-check-label">同意 <a href="#" tabindex="-1">西安科技大学计算机互助圈论坛使用条款和隐私政策</a>.</span>
            <!-- 新增：条款未勾选时的错误提示，与其他表单提示样式统一 -->
          </label>
        </div>
        <div class="form-footer">
          <button type="button" class="btn btn-primary w-100" id="submit">注册</button>
        </div>
      </div>
    </form>
    <div class="text-center text-muted mt-3">
      我已有一个账户? <a href="./sign-in.html" tabindex="-1">登录</a>
    </div>
  </div>
</div>

</body>
<!-- 导入JS（保持原有逻辑不变） -->
<script src="./dist/js/tabler.min.js"></script>
<script src="./dist/js/jquery-3.6.3.min.js"></script>
<script src="./dist/js/jquery.toast.js"></script>
<script>
  $(function () {
    // 获取表单并校验
    $('#submit').click(function () {
      let checkForm = true;
      // 校验用户名
      if (!$('#username').val()) {
        $('#username').addClass('is-invalid');
        checkForm = false;
      }
      // 校验昵称
      if (!$('#nickname').val()) {
        $('#nickname').addClass('is-invalid');
        checkForm = false;
      }
      // 校验密码非空
      if (!$('#password').val()) {
        $('#password').addClass('is-invalid');
        checkForm = false;
      }
      // 校验确认密码非空及一致性
      if (!$('#passwordRepeat').val() || $('#password').val() != $('#passwordRepeat').val()) {
        $('#passwordRepeat').addClass('is-invalid');
        checkForm = false;
      }
      // 核心优化1：条款勾选校验 - 未勾选时添加错误类，触发提示
      if (!$('#policy').prop('checked')) {
        $('#policy').addClass('is-invalid');
        checkForm = false;
      } else {
        // 已勾选时移除错误类（避免二次提交仍显示错误）
        $('#policy').removeClass('is-invalid');
      }

      // 构造请求数据
      let postData = {
        username : $('#username').val(),
        nickname : $('#nickname').val(),
        password : $('#password').val(),
        passwordRepeat : $('#passwordRepeat').val()
      };

      // 发送AJAX注册请求
      $.ajax ({
        type : 'post',
        url  : 'user/register',
        contentType : 'application/x-www-form-urlencoded',
        data : postData,
        success: function(respData){
          if (respData.code == 0) {
            // 注册成功跳转登录页
            location.assign('/sign-in.html');
          } else {
            // 注册失败提示
            $.toast({
              heading: '警告',
              text: respData.message,
              icon: 'warning'
            });
          }
        },
        error : function() {
          // 网络错误提示
          $.toast({
            heading: '错误',
            text: '访问出现问题，请与管理员联系.',
            icon: 'error'
          });
        }
      });
    });

    // 表单项失焦校验
    $('#username, #nickname, #password').on('blur', function () {
      if ($(this).val()) {
        $(this).removeClass('is-invalid');
        $(this).addClass('is-valid');
      } else {
        $(this).removeClass('is-valid');
        $(this).addClass('is-invalid');
      }
    })

    // 确认密码失焦校验
    $('#passwordRepeat').on('blur', function () {
      if ($(this).val() && $(this).val() == $('#password').val()) {
        $(this).removeClass('is-invalid');
        $(this).addClass('is-valid');
      } else {
        $(this).removeClass('is-valid');
        $(this).addClass('is-invalid');
      }
    })

    // 政策勾选状态变化
    $('#policy').on('change', function () {
      if ($(this).prop('checked')) {
        $(this).removeClass('is-invalid');
        $(this).addClass('is-valid');
      } else {
        $(this).removeClass('is-valid');
        $(this).addClass('is-invalid');
      }
    })

    // 密码显示/隐藏切换
    $('#passwordRepeat_a').click(function () {
      let $input = $('#passwordRepeat');
      $input.attr('type', $input.attr('type') === 'password' ? 'text' : 'password');
    });
    $('#password_a').click(function () {
      let $input = $('#password');
      $input.attr('type', $input.attr('type') === 'password' ? 'text' : 'password');
    });
  });
</script>
</html>